IvorySQL v4 逻辑复制槽同步功能解析
IvorySQL v4 基于 PostgreSQL 17,引入了逻辑复制槽同步至热备份数据库的功能。这一改进有效解决了旧版本中主数据库与备份数据库切换后逻辑复制中断的问题。对于那些追求数据高可用性和业务连续性的数据库来说,这无疑是一个重大的利好消息。它不仅提升了系统的整体稳定性,还确保了在故障发生时,数据复制过程能够无缝继续,从而最大程度地降低了业务中断的可能性。

复制槽同步机制
前提条件
- 物理复制槽:主数据库与备份数据库之间必须存在物理复制槽,作为逻辑复制槽同步的基础,确保数据在主备之间有效传输。。
- 配置参数:
- 在备份数据库上配置
primary_slot_name参数,并在使用pg_basebackup工具时指定复制槽。这一配置步骤确保了备份数据库能够正确接收主数据库数据。 - 启用备份数据库的
hot_standby_feedback功能,确保其能接收并反馈 WAL 日志。这一功能的启用保证了备份数据库在接收数据时的活跃性和反馈机制的完整性。 - 在
primary_conninfo参数中指定有效的数据库名称(dbname)。这一配置确保了复制过程中的目标数据库是明确且正确的。
- 在备份数据库上配置
- 推荐配置:在主数据库上配置
standby_slot_names参数以保持复制槽同步的一致性。这一配置有助于维护主备数据库间复制槽的一致状态,从而提高复制过程的可靠性。
实现方式
-
创建逻辑复制槽: 调用
pg_create_logical_replication_slot函数时设置failover=true,指定复制槽同步至备份数据库。这一设置至关重要,因为它决定了复制槽在主备切换时的行为。 -
订阅配置: 使用
CREATE SUBSCRIPTION语句时指定failover=true,确保复制槽同步至备份数据库。这为数据库管理员提供了灵活的配置选项,使他们能够根据实际业务需求和环境特点定制复制策略。 -
手动同步: 在备份数据库上执行
pg_sync_replication_slots函数,手动同步复制槽。这种方法提供了一种即时同步的手段,特别适用于需要立即反映主数据库变更的场景。 -
自动同步: 设置备份数据库的
sync_replication_slots = on,实现定期自动同步,无需重启数据库。这一自动化功能简化了数据库的维护工作,使管理员能够将更多精力投入到其他关键任务中。
下图是配置及创建同步逻辑复制槽的流程图,详细的顺序讲解了如何配置同步逻辑复制槽基础参数,以及如何创建一个同步逻辑复制槽。

函数与参数
pg_create_logical_replication_slot
- 新增了 failover 参数, 其默认值为 false。若设置为 true,则表示该复制槽需同步至备份数据库。
- 示例语法:
SELECT pg_create_logical_replication_slot('test_slot', 'test_decoding', false, false, true) - 这一函数的引入,为数据库管理员提供了更精细的控制手段,使得逻辑复制槽的管理更加灵活和高效。
pg_sync_replication_slots
- 该函数用于手动同步复制槽至备份数据库。
- 示例语法:
SELECT pg_sync_replication_slots() - 通过这一函数,可以即时地将主数据库的变更同步到备份数据库,确保数据的一致性和完整性。
sync_replication_slots
- 在备份数据库上设置该参数为 on,可实现复制槽变更的定期自动同步,无需重启数据库。
- 这一自动化设置极大地减轻了数据库管理员的负担,使得复制槽的维护工作更加轻松和高效。


如上图所示,为主库和备库的复制槽的状态,主库创建了逻辑复制槽 test_slots2,并定义属性 failover 为 true,开启了这个槽的故障转移功能,通过手动或自动的方式,可以将逻辑复制槽 test_slots2 的状态及信息同步至备库,当发生主备切换或者故障转移时,备库被提升为新主时,逻辑复制槽 test_slots2 的信息将会保留,从而保证订阅端间断、不丢失数据。
